<?php

namespace app\common\validate;

use think\Validate;

class FileUploadValidate extends Validate
{
    // 定义验证规则
    protected $rule = [
        'file' => 'file|mimes:xls,xlsx|max:51200',  // 验证文件类型和大小
    ];

    // 定义错误消息
    protected $message = [
        'file.mimes' => '文件类型必须是 xls 或 xlsx 格式',
        'file.max' => '文件大小不能超过 50MB',
    ];

    // 定义验证场景
    protected $scene = [
        'upload' => ['file'],
    ];

    // 添加自定义的mimes验证规则
    public function mimes($value, $rule, $data = [])
    {
        // 将 $rule 转换为数组，防止传递的字符串问题
        $allowedMimes = explode(',', $rule);

        // 确保 $value 是一个上传的文件对象
        if (is_object($value) && method_exists($value, 'getRealPath')) {
            // 获取上传文件的临时路径
            $filePath = $value->getRealPath();

            // 获取文件的 MIME 类型
            $fileMime = mime_content_type($filePath);

            // 比较文件的 MIME 类型
            if (in_array($fileMime, $allowedMimes)) {
                return true;
            } else {
                return '文件类型不符合要求';
            }
        }

        // 如果 $value 不是有效的文件对象
        return '文件验证失败';
    }
}
